/**
 * 企业服务实现类 - 处理多租户企业管理的核心业务逻辑
 *
 * 开发人员：马勇俐
 * 开发时间：2025-11-16 至 2025-11-20
 * 模块职责：实现多租户企业的创建、查询、更新、删除等核心业务逻辑，维护企业租户信息
 *
 * 技术要点：
 * - 多租户企业数据隔离和管理
 * - 企业名称唯一性验证机制
 * - 企业信息完整性校验和更新
 * - 企业状态管理和生命周期控制
 * - 异常处理和事务管理机制
 *
 * 开发故事：负责企业服务的核心业务逻辑实现，与企业控制器和前端企业界面深度配合，确保多租户企业的完整管理和数据安全性。
 */
package com.pbl.service.impl;

import com.pbl.common.exception.BizException;
import com.pbl.entity.Enterprise;
import com.pbl.repository.EnterpriseRepository;
import com.pbl.service.EnterpriseService;
import org.springframework.stereotype.Service;

import java.util.List;

@Service
public class EnterpriseServiceImpl implements EnterpriseService {

    private final EnterpriseRepository enterpriseRepository;

    /**
     * 构造企业服务实现
     * @param enterpriseRepository 企业数据访问层
     */
    public EnterpriseServiceImpl(EnterpriseRepository enterpriseRepository) {
        this.enterpriseRepository = enterpriseRepository;
    }

    @Override
    public Enterprise create(Enterprise e) {
        enterpriseRepository.findByName(e.getName()).ifPresent(x -> {
            throw new BizException(400, "企业名称已存在");
        });
        e.setId(null);
        return enterpriseRepository.save(e);
    }

    @Override
    public Enterprise update(Long id, Enterprise e) {
        Enterprise db = get(id);
        db.setName(e.getName());
        db.setCreditCode(e.getCreditCode());
        db.setContactName(e.getContactName());
        db.setContactPhone(e.getContactPhone());
        db.setStatus(e.getStatus());
        db.setRemark(e.getRemark());
        return enterpriseRepository.save(db);
    }

    @Override
    public Enterprise get(Long id) {
        return enterpriseRepository.findById(id).orElseThrow(() -> new BizException(404, "企业不存在"));
    }

    @Override
    public void delete(Long id) {
        enterpriseRepository.deleteById(id);
    }

    @Override
    public List<Enterprise> list() {
        return enterpriseRepository.findAll();
    }
}
